package condominio.DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import condominio.modelo.Queja;
import condominio.DAO.BaseDAO;
import condominio.excepcion.DAOExcepcion;
import condominio.util.ConexionBD;


public class QuejaDAO extends BaseDAO {

public Queja insertar(Queja vo) throws DAOExcepcion {
    String query = "insert into Queja(Tipoqueja,Motivoqueja,FechaReporte, vivienda) values (?,?,?,?)";
    Connection con = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;
    try {
            con = ConexionBD.obtenerConexion();
            stmt = con.prepareStatement(query);
            stmt.setInt(1, vo.getTipoQueja());
            stmt.setString(2, vo.getMotivoQueja());
            stmt.setString(3, vo.getFechaReporte());
            stmt.setInt(4, vo.getViVivienda());
            int i = stmt.executeUpdate();
            if (i != 1) {
                    throw new SQLException("No se pudo insertar");
            }
           

    } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
    } finally {
            this.cerrarResultSet(rs);
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
    }
    return vo;
}

public Queja obtener(int codigoQueja) throws DAOExcepcion {
	Queja vo = new Queja();
    Connection con = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;
    try {
            String query = "select codigoqueja,tipoqueja, motivoqueja, fechareporte,vivienda from queja  where codigoqueja=?";
            con = ConexionBD.obtenerConexion();
            stmt = con.prepareStatement(query);
            stmt.setInt(1, codigoQueja);
            rs = stmt.executeQuery();
            if (rs.next()) {
                    
            	vo.setCodigoQueja(rs.getInt(1));
                vo.setTipoQueja(rs.getInt(2));
                vo.setMotivoQueja(rs.getString(3));
                vo.setFechaReporte(rs.getString(4));
                vo.setViVivienda(rs.getInt(5));
            	
            	            }
    } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
    } finally {
            this.cerrarResultSet(rs);
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
    }
    return vo;
}

public void eliminar(int idCategoria) throws DAOExcepcion {
    String query = "update Queja set estado = 0 WHERE codigoqueja=?";
    Connection con = null;
    PreparedStatement stmt = null;
    try {
            con = ConexionBD.obtenerConexion();
            stmt = con.prepareStatement(query);
            stmt.setInt(1, idCategoria);
            int i = stmt.executeUpdate();
            if (i != 1) {
                    throw new SQLException("No se pudo eliminar");
            }
    } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
    } finally {
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
    }
}


public Collection<Queja> listar() throws DAOExcepcion {
    Collection<Queja> c = new ArrayList<Queja>();
    Connection con = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;
    try {
            con = ConexionBD.obtenerConexion();
            String query = "select codigoqueja,tipoqueja, motivoqueja, fechareporte,vivienda from queja order by fechareporte";
            stmt = con.prepareStatement(query);
            rs = stmt.executeQuery();
            while (rs.next()) {
                    Queja vo = new Queja();
                    vo.setCodigoQueja(rs.getInt("codigoQueja"));
                    vo.setTipoQueja(rs.getInt("tipoQueja"));
                    vo.setMotivoQueja(rs.getString("motivoQueja"));
                    vo.setFechaReporte(rs.getString("fechaReporte"));
                    vo.setViVivienda(rs.getInt("vivienda"));
                    c.add(vo);
            }

    } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
    } finally {
            this.cerrarResultSet(rs);
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
    }
    return c;
}

public Collection<Queja> listarPorResidente(String CodigoResidente) throws DAOExcepcion {
    Collection<Queja> c = new ArrayList<Queja>();
    Connection con = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;
    try {
            con = ConexionBD.obtenerConexion();
            String query = "select queja.codigoqueja,queja.tipoqueja, queja.motivoqueja, queja.fechareporte," +
            			"queja.vivienda from queja " + 
            			"INNER JOIN vivienda as vi on vi.CodigoVivienda = queja.Vivienda " + 
            			"INNER JOIN residente as re on re.CodigoResidente = vi.Residente " +
            			"where re.DocumentoIdentidad = ? " +
            			"order by codigoqueja";	
            stmt = con.prepareStatement(query);
            stmt.setString(1, CodigoResidente);
            rs = stmt.executeQuery();
            while (rs.next()) {
                    Queja vo = new Queja();
                    vo.setCodigoQueja(rs.getInt("codigoQueja"));
                    vo.setTipoQueja(rs.getInt("tipoQueja"));
                    vo.setMotivoQueja(rs.getString("motivoQueja"));
                    vo.setFechaReporte(rs.getString("fechaReporte"));
                    vo.setViVivienda(rs.getInt("vivienda"));
                    c.add(vo);
            }

    } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
    } finally {
            this.cerrarResultSet(rs);
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
    }
    return c;
}


}
